Цикл do-while
=============

.. index:: 
    do
    while
    do while
    
В главе о цикле for (стр. 93) мы рассмотрели шаги, на которых выполняется цикл while (стр.
28):

.. code-block:: console

    preparation
    condition check
    actual work
    iteration
    condition check
    actual work
    iteration
    ...

Цикл do-while очень похож на цикл while. Разница в том, что
проверка состояния выполняется в конце каждой итерации цикла do-while, так
что фактическая работа выполняется по крайней мере один раз:

.. code-block:: console

    preparation
    actual work
    iteration
    condition check ← проверка в конце итерации
    actual work
    iteration
    condition check ← проверка в конце итерации

Например, do-while может быть более естественным в следующей программе, где
пользователь угадывает число, поскольку пользователь должен угадать хотя бы один раз, чтобы число
можно было сравнить:

.. code-block:: d

    import std.stdio;
    import std.random;

    void main()
    {
        int number = uniform(1, 101);
        writeln("I am thinking of a number between 1 and 100.");
        int guess;
        do
        {
            write("What is your guess? ");
            readf(" %s", &guess);
            if (number < guess)
            {
                write("My number is less than that. ");
            }
            else if (number > guess)
            {
                write("My number is greater than that. ");
            }
        }
        while (guess != number);
        writeln("Correct!");
    }


Функция uniform(), используемая в программе, определена в модуле std.random.
Она возвращает случайное число в указанном диапазоне.
При использовании способа, описанного выше, второе число считается находящимся за пределами диапазона.
Другими словами, uniform() не вернула бы 101 для этого вызова.


Упражнение
-----------

Напишите программу, которая играет в ту же игру, но пусть программа сама угадывает.
Если программа написана правильно, она должна быть в состоянии угадать номер пользователя
не более чем за 7 попыток.
Решение находится на странице 708.
